package com.example.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//@RestController
@Controller
public class TestController {
    // 我们这里是一级目录，与前面讲的二级目录，并不冲突
    @RequestMapping(value = "sayhi")
    @ResponseBody
    public String sayHi(){
        return "hello. RestController";
    }

    @RequestMapping(value = "fw")
    public String myForward(){// 返回的是一个页面信息
        // 实现非常简单！ 返回一个 键值对形式的字符串
        // forward 作为 key，【关键字】实现请求转发的关键
        // value 值 就是转发的内容
        return "forward:/hello.html";
    }

    @RequestMapping(value = "fw1")
    public String myForward1(){// 返回的是一个页面信息
        // 实现非常简单！ 返回一个 键值对形式的字符串
        // forward 作为 key，【关键字】实现请求转发的关键
        // value 值 就是转发的内容
        return "/hello.html";
    }

    @RequestMapping(value = "fw2")
    public void myForward2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 返回的是一个页面信息
        // 通过 getRequestDispatcher 方法 获取 请求调度器
        // 里面的参数，就是跳转网页的地址
        // 后面再让调度器 使用 forward 方法（将请求 和 响应 对象，作为其参数），进行请求转发
        // 其实意思就是：在服务器接收请求之后，通过调用getRequestDispatcher方法获取 转发资源
        // 最后再通过 forward 将 请求查询到内容，写到 响应中，返回给前端。
        // 需要注意的是 forward 是需要处理异常的，因为转发的地址，可能不存在！
        request.getRequestDispatcher("/hello.html").forward(request,response);
    }

    @RequestMapping(value = "rd")
    public String myRedirect(){
        return "redirect:/hello.html";
    }

    @RequestMapping(value = "rd2")
    public void myRedirect2(HttpServletResponse response) throws IOException {
        response.sendRedirect("/hello.html");
    }
}
